home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / wais / waisgate / sigsrch.c < prev    next >
C/C++ Source or Header  |  1995-05-09  |  6KB  |  243 lines

  1. /* WIDE AREA INFORMATION SERVER SOFTWARE
  2.    No guarantees or restrictions.  See the readme file for the full standard
  3.    disclaimer.    
  4. */
  5. #ifndef lint
  6. static char *RCSid = "$Header: /proj/wais/wais-8-b5/ir/RCS/sigsrch.c,v 1.28 92/03/05 07:08:41 shen Exp $";
  7. #endif
  8.  
  9. /* Change log:
  10.  * $Log:    sigsrch.c,v $
  11.  * Revision 1.28  92/03/05  07:08:41  shen
  12.  * update init_search_engine to take two more parameters: grow percent
  13.  * and text size. Add these two parameters to call to sig_open_database
  14.  * 
  15.  * Revision 1.27  92/02/12  13:47:27  jonathan
  16.  * Added "$Log" so RCS will put the log message in the header
  17.  * 
  18.  * 
  19. */
  20.  
  21. /* implements the search part of irext.h 
  22.    (search_word and finished_search_word)
  23.    Stub for tracy shen.
  24.  */
  25.  
  26. #include "cdialect.h"
  27. #include "irfiles.h"
  28. #include "irsearch.h"
  29. #include "irext.h"
  30. #include <string.h>
  31. #include "sigsrch.h"
  32.  
  33.  
  34. /* ==================================
  35.  * ===  Initialization Functions  ===
  36.  * ==================================*/
  37.  
  38. /* set by init_search_engine when cm_mem_percent is non-zero */
  39. long cm_mem_percent_saved = 0; 
  40. long text_size_saved = 0; 
  41. long grow_percent_saved = 0; 
  42.  
  43. long init_search_engine(file, initialize, for_search, cm_mem_percent,
  44. text_size, grow_percent)
  45.   char* file;
  46.   boolean initialize;
  47.   boolean for_search;
  48.   long cm_mem_percent;
  49.   long text_size;
  50.   long grow_percent;
  51. {
  52.   long for_update;
  53.   char full_filename[MAX_FILE_NAME_LEN+1];
  54.   char *getenv(), *temps;
  55.  
  56.   waislog(WLOG_MEDIUM, WLOG_INFO, "Starting Seeker-RAM Engine.");
  57.  
  58.   if(cm_mem_percent != 0)
  59.     cm_mem_percent_saved = cm_mem_percent;
  60.   if(grow_percent != 0)
  61.     grow_percent_saved = grow_percent;
  62.   if(text_size != 0)
  63.     text_size_saved = text_size;
  64.  
  65.   temps = getenv("SEEKER_TEXT_SIZE");
  66.   if ( temps )
  67.      text_size_saved = atol( temps);
  68.  
  69.   if( for_search )
  70.     for_update = 0;
  71.   else
  72.     for_update = 1;
  73.  
  74.   temps = getenv("SEEKER_NOSECURE_SERVER");
  75.   if ( temps )
  76.      for_update = 1;
  77.   strncpy(full_filename, file, MAX_FILE_NAME_LEN);
  78.   strncat(full_filename, "/", MAX_FILE_NAME_LEN);
  79.   strncat(full_filename, database_file(file), MAX_FILE_NAME_LEN);
  80.  
  81.   return( sig_init( full_filename, (long)initialize, (long)for_search, 
  82.                     for_update, cm_mem_percent_saved) );
  83. }
  84.  
  85. long finished_search_engine()
  86. {
  87.   waislog(WLOG_MEDIUM, WLOG_INFO, "Shutting down Seeker-RAM Engine.");
  88.   return( sig_exit());
  89. }
  90.  
  91.  
  92. /*
  93.  *  ext_open_database: see irext.h
  94.  */
  95.  
  96. long ext_open_database (db, initialize, for_search)
  97.      database *db;
  98.      boolean initialize;
  99.      boolean for_search;
  100. {
  101.   long for_update;
  102.  
  103.   if( for_search )
  104.     for_update = 0;
  105.   else
  106.     for_update = 1;
  107.   return( sig_open_database( db, (long)initialize, (long)for_search, 
  108.                              for_update, cm_mem_percent_saved, 
  109.                              text_size_saved, grow_percent_saved));
  110. }
  111.   
  112.  
  113.  
  114. /*
  115.  *  ext_close_database: see irext.h
  116.  */
  117.  
  118. long ext_close_database (db)
  119.      database *db;
  120. {
  121.   return( sig_close_database(db));
  122. }
  123.  
  124.  
  125. char *database_file(database_name)
  126.      char *database_name;
  127. {
  128.   return("INDEX");
  129. }
  130.  
  131. /*===========================*
  132.  *===  Setting Paramters  ===*
  133.  *===========================*/
  134.  
  135. long max_hit_retrieved = 0;
  136. char **srcs = NULL;
  137.  
  138. long set_query_parameter (mask, parameters)
  139.      long mask;
  140.      query_parameter_type * parameters;
  141. {
  142.   switch (mask)
  143.     {
  144.     case SET_MAX_RETRIEVED_MASK:
  145.       max_hit_retrieved = parameters->max_hit_retrieved;
  146.       return(0);
  147.       break;
  148.     case SET_SELECT_SOURCE:
  149.       if(NULL != srcs){
  150.     if(NULL != srcs[0])
  151.       s_free(srcs[0]);
  152.     s_free(srcs);
  153.       }
  154.       srcs = parameters->srcs;
  155.       {long count = 0;
  156.        if(NULL == srcs)
  157.      waislog(WLOG_LOW, WLOG_INFO, "No sources specified in set_query_parameter");
  158.        else {
  159.      for(count = 0; srcs[count] != NULL; count++){
  160.        waislog(WLOG_LOW, WLOG_INFO,
  161.            "Setting source to '%s'", srcs[count]);
  162.            }
  163.  
  164.          sig_set_query_parameter( mask, parameters);
  165.      }
  166.      }
  167.       break;
  168.     default:
  169.       return(-1);
  170.       break;
  171.     }    
  172.   return(0);
  173. }
  174.  
  175. /*=============================*    
  176.  *===  Searching for words  ===*
  177.  *=============================*/
  178.  
  179. /* see irext.h for doc */
  180. long init_search_word (db)
  181.      database* db;
  182. {
  183.   return(sig_init_search_word(db));
  184. }
  185.  
  186. long search_word(word, char_pos, line_pos, weight, doc_id, 
  187.          word_pair, db)
  188.      char *word; /* the word to be searched for */
  189.      long char_pos;        /* the position of the start of the word */
  190.      long line_pos;        /* is this needed? not for signature system */
  191.      long weight;        /* how important the word looks syntactically,
  192.                    such as is it bold */
  193.      long doc_id;        /* current document, seed words is 0,
  194.                    then it increments into the relevant 
  195.                    document */
  196.      long word_pair;
  197.      database *db;
  198. {
  199.   long number_of_occurances;
  200.   long word_id = 
  201.     look_up_word_in_dictionary(word, &number_of_occurances, db);
  202.  
  203.   return( sig_search_word(word, char_pos, line_pos,
  204.               weight, doc_id, number_of_occurances, 
  205.                           ABS(word_id), word_pair));
  206. }
  207.  
  208. /*===================*
  209.  *===  Best Hits  ===*
  210.  *===================*/
  211.  
  212.  
  213. long finished_search_word(db)
  214.      database *db;
  215.   return(sig_finished_search_word(db));
  216. }
  217.  
  218. /* see irext.h for doc */
  219. long init_best_hit (db)
  220.      database *db;
  221. {
  222.   return(0);
  223. }
  224.  
  225. /* returns the next best hit */
  226. long best_hit(db, doc_id, best_character, best_line, score)
  227.      database *db;
  228.      long *doc_id;    
  229.      long *best_character;
  230.      long *best_line;
  231.      long *score;
  232. {
  233.   return(sig_best_hit(doc_id, best_character, best_line, score));
  234. }
  235.  
  236. long finished_best_hit(db)
  237.      database *db;
  238.   return(sig_finished_best_hit());
  239. }
  240.  
  241.